home *** CD-ROM | disk | FTP | other *** search
/ DOpus Plus / DOpus Plus.iso / Tutorial / C Guide / Code_Fragments / FreeSpace.c next >
C/C++ Source or Header  |  1998-09-18  |  1KB  |  46 lines

  1. /*
  2.     FreeSpace.c (DiskInfo())
  3.  
  4.     This routine returns the free space on each device (also RAM:)
  5.     in bytes. If it does return a negative value an error was occured
  6.     (ie. disk not validated,...).
  7.  
  8. */
  9.  
  10.  
  11. extern APTR mempool;
  12.  
  13.  
  14. LONG DiskInfo( STRPTR diskname )
  15. {
  16.    LONG freedisk;
  17.    DiskData *dd;
  18.    
  19.    if( Strnicmp( diskname, "RAM:", 4) )
  20.      {
  21.         if( (dd = AllocMemH(mempool, sizeof(struct InfoData))) )
  22.           {
  23.              if( (dd->lock = Lock( diskname, SHARED_LOCK )) )
  24.                {
  25.                   Info( dd->lock, dd->id );
  26.                   UnLock( dd->lock );
  27.                   
  28.                   if( dd->id->id_DiskState == ID_VALIDATED )
  29.                        freedisk = (dd->id->id_NumBlocks - dd->id->id_NumBlocksUsed) * dd->id->id_BytesPerBlock;
  30.                   else
  31.                       freedisk = -dd->id->id_DiskState;
  32.                }
  33.              else
  34.                   freedisk = -1;
  35.              FreeMemH( dd ); 
  36.           }
  37.         else
  38.              freedisk = -2;
  39.      }
  40.    else
  41.         freedisk = AvailMem( MEMF_ANY );
  42.         
  43.    return freedisk;
  44. }
  45.  
  46.